Skip to content

Binance JavaScript 杠杆交易连接器

Open Issues代码风格: Prettiernpm 版本npm 下载量Node.js 版本已知漏洞文档许可证: MIT

这是一个用于 Binance 杠杆交易 API 的客户端库,使开发者能够通过编程方式与 Binance 的杠杆交易平台进行交互。该库提供了通过 REST API 使用第三方提供的资金进行资产交易的工具:

目录

支持的功能

  • REST API 接口:
    • /sapi/v1/margin/*
    • /sapi/v1/bnbBurn/*
    • /sapi/v1/userDataStream/*
  • 包含测试用例和示例,便于快速上手。

安装

要使用该库,请确保您的环境运行的是 Node.js 22.12.0 或更高版本。如果您使用 nvm(Node 版本管理器),可以按如下方式设置正确的版本:

bash
nvm install 22.12.0
nvm use 22.12.0

然后使用 npm 安装库:

bash
npm install @binance/margin-trading

文档

如需详细信息,请参考 Binance API 文档

REST API

所有 REST API 端点均可通过 rest-api 模块访问。请注意,某些端点需要使用您的 Binance API 凭证进行身份验证。

typescript
import { MarginTrading, MarginTradingRestAPI } from '@binance/margin-trading';

const configurationRestAPI = {
    apiKey: 'your-api-key',
    apiSecret: 'your-api-secret',
};
const client = new MarginTrading({ configurationRestAPI });

client.restAPI
    .getSummaryOfMarginAccount()
    .then((res) => res.data())
    .then((data: MarginTradingRestAPI.GetSummaryOfMarginAccountResponse) => console.log(data))
    .catch((err) => console.error(err));

更多示例可在 examples/rest-api 文件夹中找到。

配置选项

REST API 支持以下高级配置选项:

  • timeout:请求超时时间,单位为毫秒(默认值:1000 毫秒)。
  • proxy:代理配置:
    • host:代理服务器主机名。
    • port:代理服务器端口。
    • protocol:代理协议(http 或 https)。
    • auth:代理身份验证凭据:
      • username:代理用户名。
      • password:代理密码。
  • keepAlive:启用 HTTP keep-alive(默认值:true)。
  • compression:启用响应压缩(默认值:true)。
  • retries:请求失败时的重试次数(默认值:3 次)。
  • backoff:重试之间的延迟毫秒数(默认值:1000 毫秒)。
  • httpsAgent:用于高级 TLS 配置的自定义 HTTPS 代理。
  • privateKey:用于身份验证的 RSA 或 ED25519 私钥。
  • privateKeyPassphrase:私钥的密码短语(如果加密)。
超时

您可以将请求的超时时间配置为毫秒。如果请求超过指定的超时时间,则会被中止。有关详细用法,请参阅 超时示例

代理

REST API 支持 HTTP/HTTPS 代理配置。有关详细用法,请参阅 代理示例

Keep-Alive

为持久连接启用 HTTP keep-alive。有关详细用法,请参阅 Keep-Alive 示例

压缩

启用或禁用响应压缩。有关详细用法,请参阅 压缩示例

重试

为失败的请求配置重试次数和每次重试之间的延迟毫秒数。有关详细用法,请参阅 重试示例

HTTPS 代理

为高级 TLS 配置自定义 HTTPS 代理。有关详细用法,请参阅 HTTPS 代理示例

基于密钥对的身份验证

REST API 支持基于密钥对的安全通信身份验证。您可以使用 RSAED25519 密钥对请求进行签名。有关详细用法,请参阅 基于密钥对的身份验证示例

证书锁定

为增强安全性,您可以在配置中使用 httpsAgent 选项进行证书锁定。这确保客户端仅与使用特定证书的服务器通信。有关详细用法,请参阅 证书锁定示例

错误处理

REST API 提供了详细的错误类型,以帮助您有效地处理问题:

  • ConnectorClientError:通用客户端错误。
  • RequiredError:缺少必填参数时抛出。
  • UnauthorizedError:表示缺少或无效的身份验证凭据。
  • ForbiddenError:禁止访问所请求的资源。
  • TooManyRequestsError:超出速率限制。
  • RateLimitBanError:IP 地址因超出速率限制而被封禁。
  • ServerError:内部服务器错误。
  • NetworkError:网络连接问题。
  • NotFoundError:未找到资源。
  • BadRequestError:无效请求。

有关详细用法,请参阅 错误处理示例

如果未提供 basePath,则默认为 https://api.binance.com

WebSocket 流

margin-trading 中的 WebSocket 流用于订阅风险和交易数据流。使用 websocket-streams 模块与之交互。

配置选项

WebSocket 流 API 支持以下高级配置选项:

  • reconnectDelay:指定重新连接尝试之间的延迟(默认值:5000 毫秒)。
  • compression:启用或禁用 WebSocket 消息的压缩(默认值:true)。
  • agent:用于高级配置自定义 WebSocket 代理。
  • mode:选择 singlepool 连接模式。
    • single:单个 WebSocket 连接。
    • pool:一组 WebSocket 连接。
  • poolSize:在池模式下定义 WebSocket 连接数量。

订阅风险和交易数据流

您可以消费风险和交易数据流,该流发送账户级别的事件,如账户和订单更新。首先通过 REST API 创建一个 listen-key;然后:

typescript
import { MarginTrading, MARGIN_TRADING_WS_STREAMS_PROD_URL } from '@binance/margin-trading';

const configurationWebsocketStreams = {
  wsURL: MARGIN_TRADING_WS_STREAMS_PROD_URL,
};
const client = new MarginTrading({ configurationWebsocketStreams });

client.websocketStreams
  .connect()
  .then((connection) => {
      const tradeStream = connection.tradeData('listenKey');
      tradeStream.on('message', (data) => {
          switch (data.e) {
              case 'balanceUpdate':
                  console.log('余额更新流', data);
                  break;
              case 'outboundAccountPosition':
                  console.log('出站账户持仓流', data);
                  break;
              // …处理其他情况…
              default:
                  console.log('未知流', data);
                  break;
          }
      });
  })
  .catch((err) => console.error(err));

基本示例

以下是一个简单的 FastAPI 应用,演示了如何使用 pydantic 模型进行请求和响应数据的验证。

python
from fastapi import FastAPI
from pydantic import BaseModel
import uvicorn

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float
    is_offer: bool = None

@app.get("/")
def read_root():
    return {"message": "欢迎使用 FastAPI!"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    return {
        "item_id": item_id,
        "item_name": item.name,
        "item_price": item.price
    }

if __name__ == "__main__":
    uvicorn.run(app, host="127.0.0.1", port=8000)

演示说明

  • Item 是一个 pydantic 模型,用于验证请求体。
  • @app.get()@app.put() 等是 FastAPI 提供的装饰器,用于定义 API 路由。
  • uvicorn.run() 用于启动 ASGI 应用。

运行应用

  1. 安装依赖:

    bash
    pip install fastapi uvicorn
  2. 将上述代码保存为 main.py

  3. 运行服务器:

    bash
    uvicorn main:app --reload
  4. 打开浏览器访问 http://127.0.0.1:8000/docs 以查看交互式 API 文档。

typescript
import { MarginTrading, MARGIN_TRADING_RISK_WS_STREAMS_PROD_URL } from '@binance/margin-trading';

const configurationWebsocketStreams = {
  wsURL: MARGIN_TRADING_RISK_WS_STREAMS_PROD_URL,
};
const client = new MarginTrading({ configurationWebsocketStreams });

client.websocketStreams
  .connect()
  .then((connection) => {
      const riskStream = connection.riskData('listenKey');
      riskStream.on('message', (data) => {
          switch (data.e) {
              case 'MARGIN_LEVEL_STATUS_CHANGE':
                  console.log('风险等级变更流', data);
                  break;
              case 'USER_LIABILITY_CHANGE':
                  console.log('风险等级变更流', data);
                  break;
              default:
                  console.log('未知数据流', data);
                  break;
          }
      });
  })
  .catch((err) => console.error(err));

取消订阅流

你可以使用 unsubscribe 方法取消对风险和交易数据流的订阅。这在无需关闭连接的情况下,有助于管理当前的活跃订阅。

typescript
import { MarginTrading, MARGIN_TRADING_WS_STREAMS_PROD_URL } from '@binance/margin-trading';

const configurationWebsocketStreams = {
  wsURL: MARGIN_TRADING_WS_STREAMS_PROD_URL,
};
const client = new MarginTrading({ configurationWebsocketStreams });

client.websocketStreams
  .connect()
  .then((connection) => {
      const tradeStream = connection.tradeData('listenKey');
      tradeStream.on('message', (data) => {
          switch (data.e) {
              case 'balanceUpdate':
                  console.log('余额更新流', data);
                  break;
              case 'outboundAccountPosition':
                  console.log('出站账户持仓流', data);
                  break;
              default:
                  console.log('未知流', data);
                  break;
          }
      });

      setTimeout(() => {
        stream.unsubscribe();
        console.log('已取消订阅交易数据流');
      }, 10000);
  })
  .catch((err) => console.error(err));

如果未提供 wsURL,则默认使用 wss://stream.binance.com:9443

自动连接续期

在 API 密钥 24 小时过期之前,系统会自动为 WebSocket API 和 WebSocket 流连接续期,以确保持续连接。

测试

要运行测试:

bash
npm 安装

npm 运行测试

测试涵盖:

  • REST API 端点
  • 错误处理和边界情况

迁移指南

如果您正在升级到新的模块化结构,请参考迁移指南,以获取详细步骤。

贡献

我们欢迎贡献!

由于此仓库包含自动生成的代码,我们建议您首先创建一个 GitHub Issue 来讨论您的想法或提出改进建议。这有助于确保所做的更改符合项目的开发目标和自动化生成流程。

如需贡献,请遵循以下步骤:

  1. 创建一个 GitHub Issue,描述您的建议或发现的 Bug。
  2. 如果确认需要更改,维护人员将把更改合并到主分支中。

如果您直接进行贡献,请确保所有测试都能通过。请在讨论并确认更改后再提交 Pull Request。

感谢您的贡献!

许可证

本项目采用 MIT 许可证。详情请参阅 LICENCE 文件。